/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pessoas.collection;

import java.util.ArrayList;
import pessoas.model.Contato;
import pessoas.model.Operadora;
import pessoas.serializacao.serializacaoXML;

/**
 *
 * @author Bush
 */
public class Operadoras {

    private ArrayList<Operadora> operadoras;
    private serializacaoXML serializacaoXml;

    public Operadoras() throws Exception {
        if (operadoras == null) {
            operadoras = new ArrayList<Operadora>();
        }
        if (serializacaoXml == null) {
            serializacaoXml = new serializacaoXML();
        }
        carregarOperadoras();
    }

    private void carregarOperadoras() throws Exception {
        this.operadoras = serializacaoXml.inicializaOperadoras();
    }

    public ArrayList<Operadora> getOperadoras() {
        return operadoras;
    }

    public Contato detectaUfOperadora(Contato contato) {
        contato.setUf(retornaUf(contato.getTelefone().substring(1, 3)));
        contato.setOperadora(retornaOperadora(contato.getUf(), contato.getTelefone().substring(4, 6)));
        contato.setTelefone(detectaNonoDigito(contato.getTelefone()));
        return contato;
    }

    public boolean dddExiste(String ddd) {

        for (int i = 0; i < operadoras.size(); i++) {
            String ddds[] = operadoras.get(i).getDdd().split(",");
            for (int j = 0; j < ddds.length; j++) {
                if (ddds[j].equals(ddd)) {
                    return true;
                }
            }
        }
        return false;
    }
    
    public boolean prefixoExiste(String uf, String prefixo) {

        for (int i = 0; i < operadoras.size(); i++) {
            String pref[] = operadoras.get(i).getPrefixo().split(",");
            for (int j = 0; j < pref.length; j++) {
                if (operadoras.get(i).getUf().equals(uf) && pref[j].equals(prefixo)) {
                        return true;
                }
            }
        }
        return false;
    }

    public String retornaUf(String ddd) {

        for (int i = 0; i < operadoras.size(); i++) {
            String ddds[] = operadoras.get(i).getDdd().split(",");
            for (int j = 0; j < ddds.length; j++) {
                if (ddds[j].equals(ddd)) {
                    return operadoras.get(i).getUf();
                }
            }
        }
        return "";
    }

    private String retornaOperadora(String uf, String prefixo) {

        for (int i = 0; i < operadoras.size(); i++) {
            String pref[] = operadoras.get(i).getPrefixo().split(",");
            for (int j = 0; j < pref.length; j++) {
                if (operadoras.get(i).getUf().equals(uf) && pref[j].equals(prefixo)) {
                        return operadoras.get(i).getOperadora();
                }
            }
        }
        return "";
    }
    
    private String detectaNonoDigito(String telefone) {
        
        int ddd = Integer.parseInt(telefone.substring(1, 3));
        String tel = telefone.substring(4, 8)+ telefone.substring(9) ;
        
        if ((ddd >= 11 && ddd <= 19) || ddd == 28 || ddd == 27 || ddd == 24 || ddd == 22 || ddd == 21) {
            if (tel.length() == 8) {
                String telAlterado = telefone.substring(0, 4) + "9" + telefone.substring(4);
                return telAlterado;
            }
        }else if(tel.length() == 9){
            String telAlterado = telefone.substring(0, 4) + telefone.substring(5);
                return telAlterado;
        }
        return telefone;
    }

}
